modifikacia binarnych DFM
Otázka od: Lubos Urban
9. 12. 2002 17:19
Cafte
Mam taky problem s binarnimi delphi *.dfm subormi a sice:
moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor z
delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho ulozit
v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
Skusal som uz vsetko mozne TReader, TStream.ReadComponent ani s jednym sa mi
nepodarilo nacitat formu (chyby typu Invalid stream format, Invadid property
value atd.. )
Vsetky priklady ktore som nasiel nacitavali iba formy alebo objekty ktore
boli sucastou aplikacie, ale nie nejake formy ktore nie su sucastou
aplikacie a jedine co viem ze su potomkami TForm.
Ak by som vas mohol poprosit o nejaky kratucky example ako to spravit, velmi
by mi to pomohlo, lebo uz naozaj beviem ako dalej.
W2k, D5. Ent.
s pozdravom Lubor Urban
Odpovedá: Danik Frantik
10. 12. 2002 9:31
A neslo by pomoci convert.exe (Delphi\Bin\Convert.exe) prevest na textovy
tvar, pak to zmenit a potom zase vratit do binarniho formatu?
Jinak nevim jak vy, ale ja binarni format NIKDY nepouzivam. (Je uspornejsi,
ale spatne se verzuje ve FreeVCS
Danik
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
Behalf Of Lubos Urban
Cafte
moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor z
delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho ulozit
v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
s pozdravom Lubor Urban
Odpovedá: Lauko Stefan
10. 12. 2002 11:53
Ahoj,
tvoj problem vyriesi tento kod... Prisposobit pre tvoje potreby si to musis
sam.
(je to skopirovane z helpu)
function ComponentToString(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
function StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
Lauko.
----- Original Message -----
From: "Lubos Urban" <Lubos.Urban@visicom.sk>
Sent: Monday, December 09, 2002 4:51 PM
> Mam taky problem s binarnimi delphi *.dfm subormi a sice:
> moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor
z
> delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho
ulozit
> v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
> Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
> Skusal som uz vsetko mozne TReader, TStream.ReadComponent ani s jednym sa
mi
> nepodarilo nacitat formu (chyby typu Invalid stream format, Invadid
property
> value atd.. )
> Vsetky priklady ktore som nasiel nacitavali iba formy alebo objekty ktore
> boli sucastou aplikacie, ale nie nejake formy ktore nie su sucastou
> aplikacie a jedine co viem ze su potomkami TForm.
>
> Ak by som vas mohol poprosit o nejaky kratucky example ako to spravit,
velmi
> by mi to pomohlo, lebo uz naozaj beviem ako dalej.
Odpovedá: Lubos Urban
10. 12. 2002 12:42
O tomto sposobe prevodu binarnych DFM na textove DFM viem, ale myslim ze
existuje aj taky pristup ze nacitas tu formu z binarneho DFM priamo a ono ti
ju aj vytvoti a potom len cez vlastnost Controls prisatupujes k jednotlivym
komponentam, a tym jednoducho menis ich properties .
Nevyhodou textovej formy popisu *.dfm je to ze potrebujem parser ktory mi
spravne sparsuje toto textove DFM a vytvori stromovu strukturu komponent,
preto sa mi to zdalo spravit horeuvedenym sposobom jednoduchsie.
Inak jeden taky parser som nasiel v tej utilitke na stranke Quick Reportu
(Dakujem Petrovi a teraz ho prave upravujem pre svoje potreby.
----- Original Message -----
From: "Lauko Stefan" <laukosw@naex.sk>
To: <delphi-l@clexpert.cz>
Sent: Tuesday, December 10, 2002 11:15 AM
Subject: Re: modifikacia binarnych DFM
> Ahoj,
> tvoj problem vyriesi tento kod... Prisposobit pre tvoje potreby si to
musis
> sam.
> (je to skopirovane z helpu)
>
>
> function ComponentToString(Component: TComponent): string;
>
> var
> BinStream:TMemoryStream;
> StrStream: TStringStream;
> s: string;
> begin
> BinStream := TMemoryStream.Create;
> try
> StrStream := TStringStream.Create(s);
> try
> BinStream.WriteComponent(Component);
> BinStream.Seek(0, soFromBeginning);
> ObjectBinaryToText(BinStream, StrStream);
> StrStream.Seek(0, soFromBeginning);
> Result:= StrStream.DataString;
> finally
> StrStream.Free;
>
> end;
> finally
> BinStream.Free
> end;
> end;
>
> function StringToComponent(Value: string): TComponent;
> var
> StrStream:TStringStream;
> BinStream: TMemoryStream;
> begin
> StrStream := TStringStream.Create(Value);
> try
> BinStream := TMemoryStream.Create;
> try
> ObjectTextToBinary(StrStream, BinStream);
> BinStream.Seek(0, soFromBeginning);
> Result := BinStream.ReadComponent(nil);
>
> finally
> BinStream.Free;
> end;
> finally
> StrStream.Free;
> end;
> end;
>
> Lauko.
>
>
> ----- Original Message -----
> From: "Lubos Urban" <Lubos.Urban@visicom.sk>
> Sent: Monday, December 09, 2002 4:51 PM
>
> > Mam taky problem s binarnimi delphi *.dfm subormi a sice:
> > moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm
subor
> z
> > delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho
> ulozit
> > v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
> > Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
> > Skusal som uz vsetko mozne TReader, TStream.ReadComponent ani s jednym
sa
> mi
> > nepodarilo nacitat formu (chyby typu Invalid stream format, Invadid
> property
> > value atd.. )
> > Vsetky priklady ktore som nasiel nacitavali iba formy alebo objekty
ktore
> > boli sucastou aplikacie, ale nie nejake formy ktore nie su sucastou
> > aplikacie a jedine co viem ze su potomkami TForm.
> >
> > Ak by som vas mohol poprosit o nejaky kratucky example ako to spravit,
> velmi
> > by mi to pomohlo, lebo uz naozaj beviem ako dalej.
>
>
>
>
>
>
Odpovedá: Petr Slaby
10. 12. 2002 9:52
Ahoj,
na strankach vyrobcu QuickReportu je ke stazeni utilitka (i se
zdrojaky), ktera prevadi sestavy z QR 1.0 do QR 3.x a automaticky
prevadi bianarni format DFM na textovy, provede konverzi a zase
prevede DFM na binarni format.
Petr
Tuesday, December 10, 2002, 9:04:04 AM, you wrote:
DF> A neslo by pomoci convert.exe (Delphi\Bin\Convert.exe) prevest na textovy
DF> tvar, pak to zmenit a potom zase vratit do binarniho formatu?
DF> Jinak nevim jak vy, ale ja binarni format NIKDY nepouzivam. (Je uspornejsi,
DF> ale spatne se verzuje ve FreeVCS
DF> Danik
DF> -----Original Message-----
DF> From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
DF> Behalf Of Lubos Urban
DF> Cafte
DF> moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor z
DF> delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho
ulozit
DF> v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
DF> Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
DF> s pozdravom Lubor Urban